package java行为型设计模式.策略模式;

/**
 *
 在策略模式中，可以在运行时更改算法。

 策略模式是一种行为模式。

 在策略模式中，我们创建表示各种算法的对象和运行算法的上下文对象。

 策略对象更改上下文对象上的算法。
 */
public class Main {
    public static void main(String[] args) {
        MathContext context = new MathContext(new MathAdd());
        System.out.println("10+5 = "+context.execute(10,5));

        context = new MathContext(new MathSubstract());
        System.out.println("10-5 = "+context.execute(10,5));

        context = new MathContext(new MathMultiply());
        System.out.println("10*5 = "+context.execute(10,5));
    }
}
interface MathAlgorithm{
    public int calculate(int num1,int num2);

}
class MathAdd implements MathAlgorithm{
    @Override
    public int calculate(int num1, int num2) {
        return num1 + num2;
    }
}
class MathSubstract implements MathAlgorithm{
    @Override
    public int calculate(int num1, int num2) {
        return num1 - num2;
    }
}
class MathMultiply implements MathAlgorithm{
    @Override
    public int calculate(int num1, int num2) {
        return num1 * num2;
    }
}
class MathContext{
    private MathAlgorithm algorithm;

    public MathContext(MathAlgorithm algorithm) {
        this.algorithm = algorithm;
    }
    public int execute(int num1,int num2){
        return algorithm.calculate(num1,num2);
    }
}